package fr.upmc.alasca.centreCalcul.interne.repartiteurRequetes.ports;

import fr.upmc.alasca.centreCalcul.interne.repartiteurRequetes.RepartiteurRequetes;
import fr.upmc.alasca.centreCalcul.interne.repartiteurRequetes.interfaces.RepartiteurRequetesClientI;
import fr.upmc.alasca.centreCalcul.objets.Requete;
import fr.upmc.components.ComponentI;
import fr.upmc.components.ComponentI.ComponentService;
import fr.upmc.components.ports.AbstractInboundPort;


/**
 * @author Antoine Lavaire, Sabri Labassi, Thibaut Fleury, Ryme Fantazi
 */
public	class	RepartiteurRequetesClientInboundPort
extends			AbstractInboundPort
implements		RepartiteurRequetesClientI
{
	private static final long serialVersionUID = 1L;
	
	
	public	RepartiteurRequetesClientInboundPort
	(
		String		p_uri,
		ComponentI	p_owner
	) throws Exception
	{
		super(p_uri, RepartiteurRequetesClientI.class, p_owner);
		
		assert p_uri != null && p_owner instanceof RepartiteurRequetes;
	}
	
	
	@Override
	public	void	soumettreRequete
	(
		final	Requete	p_requete
	) throws Exception
	{
		final RepartiteurRequetes rr = (RepartiteurRequetes) this.owner;
		
		rr.handleRequestAsync(
			new ComponentService<Void>() {
				@Override
				public Void call() throws Exception {
					rr.soumettreRequete(p_requete);
					return null;
				}
			}
		);
	}
}
